package com.hjx.objectassert.model;

import com.hjx.objectassert.ObjectUtil;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 账单
 * @author Administrator
 *
 */
public class BillAllData {
	private String billId;
	private String billType;
	private String bankName;
	/**
	 * 账单月份.格式yyyy-MM
	 */
	private String billMonth;
	/**
	 * 账单日.格式yyyy-MM-dd
	 */
	private Date billDate;
	/**
	 * 还款日.格式yyyy-MM-dd
	 */
	//@Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$|")
//	@Pattern(regexp = "^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$|")
	private Date paymentDueDate;
	/**
	 * 本期账单金额
	 */
	private BigDecimal newBalance = null;
	/**
	 * 本期账单金额-美元
	 */
	private BigDecimal usdNewBalance = null;
	/**
	 * 最低还款额
	 */
	private BigDecimal minPayment = null;
	/**
	 * 最低还款额-美元
	 */
	private BigDecimal usdMinPayment = null;
	/**
	 * 上期账单金额
	 */
	private BigDecimal lastBalance = null;
	/**
	 * 上期账单金额-美元
	 */
	private BigDecimal usdLastBalance = null;
	/**
	 * 上期还款金额
	 */
	private BigDecimal lastPayment = null;
	/**
	 * 上期还款金额-美元
	 */
	private BigDecimal usdLastPayment = null;
	/**
	 * 本期新增款额
	 */
	private BigDecimal newCharges = null;
	/**
	 * 本期新增款额-美元
	 */
	private BigDecimal usdNewCharges = null;
	/**
	 * 循环利息
	 */
	private BigDecimal interest = null;
	/**
	 * 循环利息-美元
	 */
	private BigDecimal usdInterest = null;
	/**
	 * 信用卡额度
	 */
	private BigDecimal creditLimit = null;
	/**
	 * 信用卡额度-美元
	 */
	private BigDecimal usdCreditLimit = null;
	/**
	 * 预借现金额度
	 */
	private BigDecimal cashLimit = null;
	/**
	 * 预借现金额度-美元
	 */
	private BigDecimal usdCashLimit = null;
	/**
	 * 购物明细
	 */

	private List<Expense> shoppingSheets = new ArrayList<Expense>();
	/**
	 * 分期明细
	 */

	private List<Installment> installments = new ArrayList<Installment>();

	/**
	 * 账单类型.DONE-已结账单;UNDONE-未结账单
	 *
	 * @return
	 */
	public String getBillType() {
		return billType;
	}

	/**
	 * 账单类型.DONE-已结账单;UNDONE-未结账单
	 * 
	 * @param billType
	 */
	public void setBillType(String billType) {
		this.billType = billType;
	}

	/**
	 * 银行名称
	 *
	 * @return
	 */
	public String getBankName() {
		return bankName;
	}

	/**
	 * 银行名称
	 * 
	 * @param bankName
	 */
	public void setBankName(String bankName) {
		this.bankName = bankName;
	}

	/**
	 * 账单月份.格式yyyy-MM
	 *
	 * @return
	 */
	public String getBillMonth() {
		return billMonth;
	}

	/**
	 * 账单月份.格式yyyy-MM
	 * 
	 * @param billMonth
	 */
	public void setBillMonth(String billMonth) {
		this.billMonth = billMonth;
	}

	/**
	 * 账单日.格式yyyy-MM-dd
	 *
	 * @return
	 */
	public Date getBillDate() {
		return billDate;
	}

	/**
	 * 账单日.格式yyyy-MM-dd
	 * 
	 * @param billDate
	 */
	public void setBillDate(Date billDate) {
		this.billDate = billDate;
	}

	/**
	 * 还款日.格式yyyy-MM-dd
	 *
	 * @return
	 */
	public Date getPaymentDueDate() {
		return paymentDueDate;
	}

	/**
	 * 还款日.格式yyyy-MM-dd
	 * 
	 * @param paymentDueDate
	 */
	public void setPaymentDueDate(Date paymentDueDate) {
		this.paymentDueDate = paymentDueDate;
	}

	/**
	 * 本期账单金额
	 *
	 * @return
	 */
	public BigDecimal getNewBalance() {
		return newBalance;
	}

	/**
	 * 本期账单金额
	 * 
	 * @param newBalance
	 */
	public void setNewBalance(BigDecimal newBalance) {
		this.newBalance = newBalance;
	}

	/**
	 * 本期账单金额-美元
	 *
	 * @return
	 */
	public BigDecimal getUsdNewBalance() {
		return usdNewBalance;
	}

	/**
	 * 本期账单金额-美元
	 * 
	 * @param usdNewBalance
	 */
	public void setUsdNewBalance(BigDecimal usdNewBalance) {
		this.usdNewBalance = usdNewBalance;
	}

	/**
	 * 最低还款额
	 *
	 * @return
	 */
	public BigDecimal getMinPayment() {
		return minPayment;
	}

	/**
	 * 最低还款额
	 * 
	 * @param minPayment
	 */
	public void setMinPayment(BigDecimal minPayment) {
		this.minPayment = minPayment;
	}

	/**
	 * 最低还款额-美元
	 *
	 * @return
	 */
	public BigDecimal getUsdMinPayment() {
		return usdMinPayment;
	}

	/**
	 * 最低还款额-美元
	 * 
	 * @param usdMinPayment
	 */
	public void setUsdMinPayment(BigDecimal usdMinPayment) {
		this.usdMinPayment = usdMinPayment;
	}

	/**
	 * 上期账单金额
	 *
	 * @return
	 */
	public BigDecimal getLastBalance() {
		return lastBalance;
	}

	/**
	 * 上期账单金额
	 * 
	 * @param lastBalance
	 */
	public void setLastBalance(BigDecimal lastBalance) {
		this.lastBalance = lastBalance;
	}

	/**
	 * 上期账单金额-美元
	 *
	 * @return
	 */
	public BigDecimal getUsdLastBalance() {
		return usdLastBalance;
	}

	/**
	 * 上期账单金额-美元
	 * 
	 * @param usdLastBalance
	 */
	public void setUsdLastBalance(BigDecimal usdLastBalance) {
		this.usdLastBalance = usdLastBalance;
	}

	/**
	 * 上期还款金额
	 *
	 * @return
	 */
	public BigDecimal getLastPayment() {
		return lastPayment;
	}

	/**
	 * 上期还款金额
	 * 
	 * @param lastPayment
	 */
	public void setLastPayment(BigDecimal lastPayment) {
		this.lastPayment = lastPayment;
	}

	/**
	 * 上期还款金额-美元
	 *
	 * @return
	 */
	public BigDecimal getUsdLastPayment() {
		return usdLastPayment;
	}

	/**
	 * 上期还款金额-美元
	 * 
	 * @param usdLastPayment
	 */
	public void setUsdLastPayment(BigDecimal usdLastPayment) {
		this.usdLastPayment = usdLastPayment;
	}

	/**
	 * 本期新增款额
	 *
	 * @return
	 */
	public BigDecimal getNewCharges() {
		return newCharges;
	}

	/**
	 * 本期新增款额
	 * 
	 * @param newCharges
	 */
	public void setNewCharges(BigDecimal newCharges) {
		this.newCharges = newCharges;
	}

	/**
	 * 本期新增款额-美元
	 *
	 * @return
	 */
	public BigDecimal getUsdNewCharges() {
		return usdNewCharges;
	}

	/**
	 * 本期新增款额-美元
	 * 
	 * @param usdNewCharges
	 */
	public void setUsdNewCharges(BigDecimal usdNewCharges) {
		this.usdNewCharges = usdNewCharges;
	}

	/**
	 * 循环利息
	 *
	 * @return
	 */
	public BigDecimal getInterest() {
		return interest;
	}

	/**
	 * 循环利息
	 * 
	 * @param interest
	 */
	public void setInterest(BigDecimal interest) {
		this.interest = interest;
	}

	/**
	 * 循环利息-美元
	 *
	 * @return
	 */
	public BigDecimal getUsdInterest() {
		return usdInterest;
	}

	/**
	 * 循环利息-美元
	 * 
	 * @param usdInterest
	 */
	public void setUsdInterest(BigDecimal usdInterest) {
		this.usdInterest = usdInterest;
	}

	/**
	 * 信用卡额度
	 *
	 * @return
	 */
	public BigDecimal getCreditLimit() {
		return creditLimit;
	}

	/**
	 * 信用卡额度
	 * 
	 * @param creditLimit
	 */
	public void setCreditLimit(BigDecimal creditLimit) {
		this.creditLimit = creditLimit;
	}

	/**
	 * 信用卡额度-美元
	 *
	 * @return
	 */
	public BigDecimal getUsdCreditLimit() {
		return usdCreditLimit;
	}

	/**
	 * 信用卡额度-美元
	 * 
	 * @param usdCreditLimit
	 */
	public void setUsdCreditLimit(BigDecimal usdCreditLimit) {
		this.usdCreditLimit = usdCreditLimit;
	}

	/**
	 * 预借现金额度
	 *
	 * @return
	 */
	public BigDecimal getCashLimit() {
		return cashLimit;
	}

	/**
	 * 预借现金额度
	 * 
	 * @param cashLimit
	 */
	public void setCashLimit(BigDecimal cashLimit) {
		this.cashLimit = cashLimit;
	}

	/**
	 * 预借现金额度-美元
	 *
	 * @return
	 */
	public BigDecimal getUsdCashLimit() {
		return usdCashLimit;
	}

	/**
	 * 预借现金额度-美元
	 * 
	 * @param usdCashLimit
	 */
	public void setUsdCashLimit(BigDecimal usdCashLimit) {
		this.usdCashLimit = usdCashLimit;
	}

	/**
	 *
	 * @return
	 */
	public List<Expense> getShoppingSheets() {
		return shoppingSheets;
	}

	/**
	 *
	 * @param shoppingSheets
	 */
	public void setShoppingSheets(List<Expense> shoppingSheets) {
		this.shoppingSheets = shoppingSheets;
	}

	/**
	 *
	 * @return
	 */
	public List<Installment> getInstallments() {
		return installments;
	}

	/**
	 *
	 * @param installments
	 */
	public void setInstallments(List<Installment> installments) {
		this.installments = installments;
	}

	/**
	 *
	 * @return
	 */
	public String getBillId() {
		return billId;
	}

	/**
	 *
	 * @param billId
	 */
	public void setBillId(String billId) {
		this.billId = billId;
	}

	@Override
	public boolean equals(Object except) {
		return ObjectUtil.equals(this.getClass(), this, except);
	}

	@Override
	public String toString(){
		return ObjectUtil.toString(this.getClass(), this);
	}
}
